package br.com.velp.sudecap.entidade;

import br.com.velp.sudecap.enumerator.SistemaEnum;
import br.com.velp.sudecap.hibernate.intercept.Auditable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.*;
import org.hibernate.annotations.Cascade;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 06.11.2012 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <requisitos_afetados> RF010.04 - Gerenciar de Grupo de Usuários / RF010.05 - Vincular Usuário ao Grupo </requisitos_afetados>
 * <descricao> Bean Responsável Pelo Mapeamento da Tabela DIREITO_USU </descricao>
 * </sumario>
 */
@Entity
@Table(name = "GRUPO_USU")
@Auditable(logTableName = "GRUPO_USU_LOG")
public class GrupoUsuario extends EntityBase {
    
    public static final Long serialVersionUID = 1l;
    
    @Id
    @Column(name = "COD_GRUPO_USU", nullable = false, unique = true)
    private Long id;
    
    @Column(name = "NOME_GRUPO_USU", length = 50, nullable = false)
    private String nome;
    
    @Column(name = "SISTEMA", length = 2, nullable = false)
    private String sistema;
    
    @OneToMany(orphanRemoval = true, mappedBy = "grupoUsuario")
    private List<DireitoGrupoUsuario> direitosGruposUsuarios = new ArrayList<DireitoGrupoUsuario>();
    
    @OneToMany(orphanRemoval = true, mappedBy = "grupo")
    @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
    private List<DireitoUsuario> direitosUsuario = new ArrayList<DireitoUsuario>();
    
    public GrupoUsuario() {
    }

    public GrupoUsuario(Long id) {
	this.id = id;
    }

    public Long getId() {
	return id;
    }

    public void setId(Long id) {
	this.id = id;
    }

    public String getNome() {
	return nome;
    }

    public void setNome(String nome) {
	this.nome = nome;
    }

    public String getSistema() {
        return sistema;
    }
    
    public String getSistemaStr() {
        return this.sistema != null ? SistemaEnum.getDescricao(this.sistema) : null;
    }

    public void setSistema(String sistema) {
        this.sistema = sistema;
    }

    public List<DireitoGrupoUsuario> getDireitosGruposUsuarios() {
	return direitosGruposUsuarios;
    }

    public void setDireitosGruposUsuarios(List<DireitoGrupoUsuario> direitosGruposUsuarios) {
	this.direitosGruposUsuarios = direitosGruposUsuarios;
    }

    public List<DireitoUsuario> getDireitosUsuario() {
	return direitosUsuario;
    }

    public void setDireitosUsuario(List<DireitoUsuario> direitosUsuario) {
	this.direitosUsuario = direitosUsuario;
    }

    public boolean contemUsuario(Usuario usuario){
	for(DireitoUsuario du : getDireitosUsuario()){
	    if(du.getUsuario().equals(usuario)){
		return true;
	    }
	}
	return false;
    }
    
}
